import pandas as pd
from faker import Faker
import random

fake = Faker()

file_items = r'D:\A_Document\A_Microsoft_VS_Code\Python\Work_7\items.csv'

# 定义一个函数，用于生成指定数量的用户数据
def generate_users(num_users):
    # 初始化一个空列表，用于存储用户数据
    users = []
    # 循环指定数量的用户
    for _ in range(num_users):
        # 生成用户的唯一标识
        user_id = fake.uuid4()
        # 生成用户的名字
        name = fake.name()
        # 生成用户的年龄，范围为18到70岁
        age = random.randint(18, 70)
        # 生成用户的性别，随机选择'Male'或'Female'
        gender = random.choice(['Male', 'Female'])
        # 将用户数据添加到列表中
        users.append([user_id, name, age, gender])
    # 返回一个包含用户数据的DataFrame
    return pd.DataFrame(users, columns=['user_id', 'name', 'age', 'gender'])

""" # 定义一个函数, 用于生成num_items数量的物品
def generate_items(num_items):
    # 初始化一个空列表，用于存储物品信息
    items = []
    # 循环num_items次
    for _ in range(num_items):
        # 生成一个随机的物品ID
        item_id = fake.uuid4()
        # 生成一个随机的物品名称
        name = fake.word().capitalize()
        # 生成一个随机的物品类别
        category = fake.word().capitalize()
        # 生成一个随机的物品价格，保留两位小数
        price = round(random.uniform(5.0, 500.0), 2)
        # 将生成的物品信息添加到列表中
        items.append([item_id, name, category, price])
    # 返回一个包含物品信息的DataFrame
    return pd.DataFrame(items, columns=['item_id', 'name', 'category', 'price']) """

# 生成用户行为数据
def generate_user_behavior(users, items, num_records):
    '''
    根据给定的用户和物品的列表，生成用户行为记录。
    参数：
    users: 用户列表, 包含user_id和user_name等属性。
    items: 物品列表, 包含item_id和item_name等属性。
    num_records: 生成用户行为记录的数量。
    返回：
    一个包含用户行为记录的DataFrame, 有user_id, item_id, action, rating四列。
    '''
    behaviors = []
    for _ in range(num_records):
        user_id = random.choice(users['user_id'])
        item_id = random.choice(items['item_id'])
        action = random.choice(['view', 'buy', 'rate'])
        rating = random.randint(1, 5) if action == 'rate' else None
        behaviors.append([user_id, item_id, action, rating])
    return pd.DataFrame(behaviors, columns=['user_id', 'item_id', 'action', 'rating'])

if __name__ == '__main__':
    # 生成500个用户
    users = generate_users(100)
    # 读取前5000条数据
    items = pd.read_csv(file_items, nrows=5000)
    # 生成20000条用户行为记录
    user_behavior = generate_user_behavior(users, items, 20000)
    # 将用户行为记录保存到csv文件中
    users.to_csv('users.csv', index=False)
    user_behavior.to_csv('user_behavior.csv', index=False)